package com.example.dakotanews.service;

import com.example.dakotanews.dto.utils.ApiResponse;
import org.springframework.stereotype.Service;

@Service
public interface CommentService {

    /**
     * @description 获取指定新闻下的全部评论内容，包括二级评论
     * @param newsId 新闻ID
     * @param sortType 排序方式，0为默认排序（按照点赞数降序排序），1为按照提交时间降序排序
     * @param page 起始页码，默认值为1
     * @param pageSize 页面大小，默认为5
     * @param userId 查看新闻的用户ID
     * @return 新闻评论List集合
     */
    ApiResponse<Object> getNewsAllComment(
            Integer newsId, Integer sortType, int page, int pageSize, Integer userId);

    /**
     * @description 在指定新闻下发表评论
     * @param newsId 新闻ID
     * @param userId 发表评论的用户的ID
     * @return 新增的评论记录的ID
     */
    ApiResponse<Object> commitComment(Integer newsId, String comment, Integer userId);

    /**
     * @description 在指定新闻的指定评论下发表评论，也可以说是对评论进行回复
     * @param newsId 新闻ID
     * @param parentId 被回复的评论的ID
     * @param repliedUserId （可选）如果是对二级评论进行回复，则该值表示被回复的用户ID
     * @param userId 发表评论的用户ID
     * @return 新增的子评论记录的ID
     */
    ApiResponse<Object> commitChildComment(
            Integer newsId, Integer parentId, Integer repliedUserId, String comment, Integer userId);

    /**
     * @description 对一级评论点赞，或者取消点赞
     * @param commentId 一级评论ID
     * @param userId 点赞用户ID
     * @return 操作结果
     */
    ApiResponse<Object> supportComment(Integer commentId, Integer userId);

    /**
     * @description 对二级评论点赞，或者取消点赞
     * @param childCommentId 二级评论ID
     * @param userId 点赞用户ID
     * @return 操作结果
     */
    ApiResponse<Object> supportChildComment(Integer childCommentId, Integer userId);

}
